﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using AdminCondominio.Dominio;
using AdminCondominio.Negocio;

namespace AdminCondominio.Controllers
{
    public class CuotaController : Controller
    {
        //
        // GET: /Cuota/
        public CuotaService CuotaService { get; set; }

        public ActionResult Index(int CoVivienda)
        {
            ViewData["CoVivienda"] = CoVivienda;
            ICollection<Cuota> cuotasPendientesList = CuotaService.ConsultarCuotasPendientesxVivienda(CoVivienda, string.Empty);
            return View(cuotasPendientesList);
        }

        public ActionResult Index_Residente()
        {
            String CoResidente;
            CoResidente = ((Usuario)Session["user"]).NoCorreo;

            List<Vivienda> cuotasResidenteList = CuotaService.ListarCuotaxResidente(CoResidente);
            return View(cuotasResidenteList);
        }

        [HttpPost]
        public ActionResult Index(int CoVivienda,FormCollection collection)
        {
            ViewData["CoVivienda"] = CoVivienda;
            string strfiltroT = (string)collection["Todos"];
            string strfiltroP = (string)collection["Pendientes"];
            string strfiltroC = (string)collection["Cancelados"];
            string strfiltro = string.Empty;
            if (!string.IsNullOrEmpty(strfiltroT))
                strfiltro = strfiltroT;
            else if (!string.IsNullOrEmpty(strfiltroP))
                strfiltro = strfiltroP;
            else if (!string.IsNullOrEmpty(strfiltroC))
                strfiltro = strfiltroC;
            
            //ICollection<Cuota> cuotasPendientesList = CuotaService.ConsultarCuotasPendientesxVivienda(int.Parse(collection["CoVivienda"]), strfiltro);
            ICollection<Cuota> cuotasPendientesList = CuotaService.ConsultarCuotasPendientesxVivienda(CoVivienda, strfiltro);
            return View(cuotasPendientesList);
        }

        public ActionResult Create(int CoVivienda)
        {
            ViewData["CoVivienda"] = CoVivienda;
            return View();
        }
                
        [HttpPost]
        public ActionResult Create(FormCollection collection)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    Cuota cuotaACrear = new Cuota();
                    cuotaACrear.Vivienda = new Vivienda();
                    
                    cuotaACrear.Vivienda.CoVivienda = int.Parse(collection["Vivienda"]);
                    //cuotaACrear.Vivienda.CoVivienda = CoVivienda;
                    cuotaACrear.TxPeriodo = (String)collection["TxPeriodo"];
                    cuotaACrear.Importe = decimal.Parse(collection["Importe"]);
                    cuotaACrear.FeVencimiento = DateTime.Parse(collection["FeVencimiento"]);
                    cuotaACrear.Estado = "P";
                                        
                    CuotaService.RegistrarCuota(cuotaACrear);
                    ViewData["CoVivienda"] = int.Parse(collection["Vivienda"]);
                    return RedirectToAction("Index", "Cuota", new { CoVivienda = collection["Vivienda"] });
                }
                else
                {
                    ViewData["CoVivienda"] = int.Parse(collection["Vivienda"]);
                    return View();
                }
            }
            catch (Exception e)
            {
                ModelState.AddModelError(String.Empty, "Error al crear la cuota: " + e.Message);
                ViewData["CoVivienda"] = int.Parse(collection["Vivienda"]);
                return View();
            }
        }


        //Pago de cuotas

        public ActionResult Edit(int CoVivienda, string TxPeriodo)
        {
            ViewData["CoVivienda"] = CoVivienda; 
            var items = new[] {   
                new TipoPago { CoTipoPago = 1, TxDescripcion = "Contado" }, 
                new TipoPago { CoTipoPago = 2, TxDescripcion = "Credito" }, 
                new TipoPago { CoTipoPago = 3, TxDescripcion = "Transferencia" } 
            };
            ViewData["tipopago"] = new SelectList(items, "CoTipoPago", "TxDescripcion", 2);
            Cuota modelo = CuotaService.ObtenerCuota(CoVivienda, TxPeriodo.Trim());
            return View(modelo);            
        }

        [HttpPost]
        public ActionResult Edit(FormCollection collection)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    Cuota cuotaAPagar = new Cuota();
                    cuotaAPagar.Vivienda = new Vivienda();

                    cuotaAPagar.CoCuota = int.Parse(collection["CoCuota"]); // codigo de la cuota a pagar                    
                    cuotaAPagar.Vivienda.CoVivienda = int.Parse(collection["Vivienda.CoVivienda"]); //codigo de la vivienda
                    cuotaAPagar.TxPeriodo = (String)collection["TxPeriodo"]; // nro de periodo               
                    cuotaAPagar.Estado = "C";//P => Pendiente; C => Cancelado;
                    cuotaAPagar.TipoPago = new TipoPago();
                    cuotaAPagar.TipoPago.CoTipoPago = int.Parse(collection["TipoPago"]);
                    cuotaAPagar.FecPago = DateTime.Now;

                    CuotaService.PagarCuota(cuotaAPagar);
                    return RedirectToAction("Index", "Cuota", new { CoVivienda = int.Parse(collection["Vivienda.CoVivienda"]) });
                }
                else
                {
                    return View();
                }
            }
            catch (Exception e)
            {
                ModelState.AddModelError(String.Empty, "Error al crear la cuota: " + e.Message);
                return View();
            }
        }

    }
}
